#!/usr/bin/env python
# coding: utf-8

# # 互评作业1: 数据探索性分析与数据预处理
# #### 学号：3220211124     姓名：单则安
# ### 0.导入所需要包

# In[1]:


import matplotlib.pyplot as plt
import numpy as np
import pandas as pd


# ### 1.导入葡萄酒评论数据

# In[2]:


data_wine = pd.read_csv('C:/Users/An/Desktop/数据挖掘/Wine Reviews/winemag-data_first150k.csv') 
data_wine[:5]


# #### 1.1 数据摘要

# In[3]:


data_wine.shape


# In[4]:


points = data_wine['points']
points[:5]


# In[5]:


price = data_wine['price']
price[:5]


# #### 1.1.1 标称属性，给出每个可能取值的频数

# In[6]:


points.value_counts()


# In[7]:


price.value_counts()


# #### 1.1.2 数值属性，缺失值的个数并给出5数概括

# ##### 统计缺失值个数

# In[8]:


points.isnull().sum()


# In[9]:


price.isnull().sum()


# In[10]:


price[price.isnull().values==True]


# ##### 我们在price的列中找到了13695条缺失值

# ##### 均值

# In[11]:


points.mean()


# In[12]:


price.mean()


# ##### 四分位数

# In[13]:


points.quantile(0.25)


# In[14]:


points.quantile(0.75)


# In[15]:


price.quantile(0.25)


# In[16]:


price.quantile(0.75)


# ##### 中位数

# In[17]:


points.quantile(0.5)


# In[18]:


price.quantile(0.5)


# ##### 最大值

# In[19]:


points.max()


# In[20]:


price.max()


# ##### 最小值

# In[26]:


points.min()


# In[32]:


price.min()


# #### 1.2 数据可视化
# ##### 散点图

# In[52]:


fig = plt.figure()
plt.scatter(points, price, c='r')
plt.xlabel('points')
plt.ylabel('price')


# ##### 盒图

# In[45]:


plt.boxplot(points, sym='o', vert=True)


# In[46]:


plt.boxplot(price, sym='o', vert=True)


# #### 可以看到由于存在大量缺失数据，盒图无法绘制，后续进行缺失值填充之后再进行绘制对比

# ##### 直方图

# In[41]:


plt.hist(points,color='blue')
plt.title('The hist of points')


# In[34]:


plt.hist(price,color='red')
plt.title('The hist of price')


# #### 1.3 缺失值填充及对比

# ##### 将缺失部分剔除

# In[35]:


price.shape


# In[36]:


price.dropna()


# In[37]:


price_delete = price.dropna()


# ##### 可以看到，在进行缺失值的删除之后数据剩余137235条，接下来绘制盒图、直方图进行可视化对比

# In[38]:


plt.hist(price_delete,color='red')
plt.title('The hist of price')


# In[39]:


plt.boxplot(price_delete, sym='o', vert=True)


# ##### 用最高频率值来填补缺失值

# In[40]:


price.fillna(20.0)


# In[41]:


price_fill = price.fillna(20.0)


# In[42]:


plt.boxplot(price_fill, sym='o', vert=True)


# In[43]:


plt.hist(price_fill,color='red')
plt.title('The hist of price')


# ##### 通过属性的相关关系来填补缺失值 (使用均值数值填充)

# In[54]:


price.mean()


# In[55]:


price.fillna(price.mean())


# In[56]:


price_meanfill = price.fillna(price.mean())


# In[57]:


plt.boxplot(price_meanfill, sym='o', vert=True)


# In[58]:


plt.hist(price_meanfill,color='red')
plt.title('The hist of price')


# ##### 通过数据对象之间的相似性来填补缺失值（在此，使用前一数据作为填充）

# In[50]:


price.fillna(method = 'ffill')


# In[51]:


price_fill_f = price.fillna(method = 'ffill')


# In[52]:


plt.boxplot(price_fill_f, sym='o', vert=True)


# In[53]:


plt.hist(price_fill_f,color='red')
plt.title('The hist of price')


# ### 2.导入YouTube的统计数据

# In[60]:


data_CAvideos = pd.read_csv('C:/Users/An/Desktop/数据挖掘/Trending YouTube Video Statistics/CAvideos.csv')
data_DEvideos = pd.read_csv('C:/Users/An/Desktop/数据挖掘/Trending YouTube Video Statistics/DEvideos.csv')


# #### 2.1合并数据

# In[61]:


data_video = pd.concat([data_CAvideos,data_DEvideos],axis=0)
data_video[:5]


# #### 2.1 数据摘要

# In[62]:


data_video.shape


# In[63]:


data_views = data_video['views']
data_views[:5]


# In[64]:


data_likes = data_video['likes']
data_likes[:5]


# In[65]:


data_dislikes = data_video['dislikes']
data_dislikes[:5]


# In[66]:


data_comment_count = data_video['comment_count']
data_comment_count[:5]


# #### 2.1.1 标称属性，给出每个可能取值的频数

# In[67]:


data_views.value_counts()


# In[68]:


data_likes.value_counts()


# In[69]:


data_dislikes.value_counts()


# In[70]:


data_comment_count.value_counts()


# #### 2.1.2 数值属性，缺失值的个数并给出5数概括

# In[71]:


data_views.isnull().sum()


# In[72]:


data_likes.isnull().sum()


# In[73]:


data_dislikes.isnull().sum()


# In[74]:


data_comment_count.isnull().sum()


# ##### 我们发现Youtube的数据没有缺失值

# ##### 中位数

# In[75]:


data_views.quantile(0.5)


# In[76]:


data_likes.quantile(0.5)


# In[78]:


data_dislikes.quantile(0.5)


# In[79]:


data_comment_count.quantile(0.5)


# ##### 四分位数

# In[82]:


data_views.quantile(0.25)


# In[83]:


data_views.quantile(0.75)


# In[84]:


data_likes.quantile(0.25)


# In[85]:


data_likes.quantile(0.75)


# In[86]:


data_dislikes.quantile(0.25)


# In[87]:


data_dislikes.quantile(0.75)


# In[88]:


data_comment_count.quantile(0.25)


# In[89]:


data_comment_count.quantile(0.75)


# ##### 最大值

# In[90]:


data_views.max()


# In[91]:


data_likes.max()


# In[92]:


data_dislikes.max()


# In[93]:


data_comment_count.max()


# ##### 最小值

# In[94]:


data_views.min()


# In[95]:


data_likes.min()


# In[96]:


data_dislikes.min()


# In[97]:


data_comment_count.min()


# #### 2.2 数据可视化

# ##### 2.2.1 直方图

# In[98]:


plt.hist(data_views)
plt.title('The hist of data_views')


# In[99]:


plt.hist(data_likes)
plt.title('The hist of data_likes')


# In[100]:


plt.hist(data_dislikes)
plt.title('The hist of data_dislikes')


# In[101]:


plt.hist(data_comment_count)
plt.title('The hist of data_comment_count')


# ##### 2.2.2盒图

# In[102]:


plt.boxplot(data_views, sym='o', vert=True)


# In[103]:


plt.boxplot(data_likes, sym='o', vert=True)


# In[104]:


plt.boxplot(data_dislikes, sym='o', vert=True)


# In[105]:


plt.boxplot(data_comment_count, sym='o', vert=True)

